﻿//using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.Data;
//using System.Drawing;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Windows.Forms;

//namespace MediaController.Extractor
//{
//    public partial class MyUnpacker : Form
//    {
//        private readonly ArchiveCollection _archives = new ArchiveCollection();

//        private bool _processCanceled;

//        private delegate void AddArchiveCallback(Archive item);

//        private delegate void ClearArchivesCallback();

//        private delegate void NewFileDelegate(object sender, NewFileEventArgs e);

//        private delegate void NewVolumeDelegate(object sender, NewVolumeEventArgs e);

//        private delegate void OutOfDiskDelegate(object sender, OutOfDiskSpaceEventArgs e);

//        private delegate void PerformStepDelegate();

//        private delegate void ProcessEndedDelegate(ArchiveCollection sender);

//        private delegate void ProcessNextArchiveDelegate(object sender, Archive a);

//        private delegate void ProcessStartedDelegate(ArchiveCollection sender);



//        public MyUnpacker()
//        {
//            InitializeComponent();
//            MyInitComponent();
//        }

//        private void MyInitComponent()
//        {
//            _archives.ExtraContent = "";//= extraContent.Text = Settings.Default.ExtraContent;
//            _archives.ContentChanged += ArchiveCollectionContentChanged;
//            _archives.ArchiveFound += ArchiveCollectionArchiveFound;
//            _archives.DestinationChanged += ArchiveCollectionDestinationChanged;
//            _archives.ProcessStarted += ArchiveCollectionProcessStarted;
//            _archives.ProcessNextArchive += ArchiveCollectionProcessNextArchive;
//            _archives.ArchiveProcessed += ArchiveCollectionArchiveProcessed;
//            _archives.ProcessEnded += ArchiveCollectionProcessEnded;

//        }

//        private void AttachHandlers(Unrar unrar)
//        {
//            unrar.NewFile += unrar_NewFile;
//            unrar.NewVolume += unrar_NewVolume;
//            unrar.ExtractionProgress += unrar_ExtractionProgress;
//            unrar.MissingVolume += unrar_MissingVolume;
//            unrar.PasswordRequired += unrar_PasswordRequired;
//            unrar.OutOfDiskSpace += unrar_OutOfDiskSpace;
//        }

//        private void AddArchive(Archive a)
//        {
//            if (archives.InvokeRequired)
//            {
//                var method = new AddArchiveCallback(AddArchive);
//                archives.Invoke(method, new object[] { a });
//            }
//            else
//            {
//                archives.Items.Add(a, true);
//            }
//        }

//        private void PerformStep()
//        {
//            overallProgress.PerformStep();
//        }

//        private void ArchiveCollectionArchiveFound(object sender, Archive a)
//        {
//            AddArchive(a);
//        }

//        private void ArchiveCollectionArchiveProcessed(object sender, Archive a)
//        {
//            if (statusStrip1.InvokeRequired)
//            {
//                statusStrip1.Invoke(new PerformStepDelegate(PerformStep));
//            }
//            else
//            {
//                overallProgress.PerformStep();
//            }
//        }

//        private void ArchiveCollectionContentChanged(ArchiveCollection sender)
//        {
//            string str = sender.Source == null ? string.Empty : sender.Source.ToString();

//            if (!str.Equals(".") && !str.Equals(sourceFolder.Text))
//            {
//                sourceFolder.Text = str;
//            }
//            Text = (sender.Source != null) ? sender.Source.Name : string.Empty;
//            archives.Items.Clear();
//            Application.DoEvents();
//        }

//        private void ArchiveCollectionDestinationChanged(ArchiveCollection sender, DirectoryInfo newDestination)
//        {
//            string str = (newDestination == null) ? string.Empty : newDestination.ToString();
//            if (!str.Equals(".") && !str.Equals(targetFolder.Text))
//            {
//                targetFolder.Text = newDestination.ToString();
//            }
//        }

//        private void ArchiveCollectionProcessEnded(ArchiveCollection sender)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new ProcessEndedDelegate(ArchiveCollectionProcessEnded), new object[] { sender });
//            }
//            else
//            {
//                processTimer.Stop();
//                processTimer = null;
//                UpdateElapsedTime();
//                startCommand.Enabled = true;
//                pauseCommand.Enabled = false;
//                cancelCommnad.Enabled = false;
//                input.Enabled = true;
//            }
//        }

//        private void ArchiveCollectionProcessNextArchive(object sender, Archive a)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new ProcessNextArchiveDelegate(ArchiveCollectionProcessNextArchive),
//                            new[] { sender, a });
//            }
//            else
//            {
//                currentArchive.Text = a.ToString();
//                fileProgress.Value = 0;
//                fileProgress.Visible = true;
//                AttachHandlers(a.Unrar);
//                int index = archives.Items.IndexOf(a);
//                archives.SetSelected(index, true);
//            }
//        }

//        private void ArchiveCollectionProcessStarted(ArchiveCollection sender)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new ProcessStartedDelegate(ArchiveCollectionProcessStarted), new object[] { sender });
//            }
//            else
//            {
//                overallProgress.Step = 100 / sender.ArchivesCount;
//                overallProgress.Value = 0;
//                overallProgress.Visible = true;
//                _processCanceled = false;
//                startCommand.Enabled = false;
//                pauseCommand.Enabled = true;
//                cancelCommnad.Enabled = true;
//                input.Enabled = false;
//                processTimer = new Timer(components);
//                processTimer.Interval = 100;
//                processTimer.Tick += processTimer_Tick;
//                processTimer.Start();
//            }
//        }

//        private void unrar_ExtractionProgress(object sender, ExtractionProgressEventArgs e)
//        {
//            if (_processCanceled)
//            {
//                e.ContinueOperation = false;
//            }
//        }

//        private void unrar_MissingVolume(object sender, MissingVolumeEventArgs e)
//        {
//            var dialog = new TextInputDialog();
//            dialog.Value = e.VolumeName;
//            dialog.Prompt = string.Format("Volume is missing.  Correct or cancel.", new object[0]);
//            if (dialog.ShowDialog() == DialogResult.OK)
//            {
//                e.VolumeName = dialog.Value;
//                e.ContinueOperation = true;
//            }
//            else
//            {
//                e.ContinueOperation = false;
//            }
//        }

//        private void unrar_NewFile(object sender, NewFileEventArgs e)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new NewFileDelegate(unrar_NewFile), new[] { sender, e });
//            }
//            else
//            {
//                if (e.FileInfo.FileName.Length > 15)
//                {
//                    currentFile.Text = e.FileInfo.FileName.Substring(0, 14) + "…";
//                    toolTip1.SetToolTip(statusStrip1, e.FileInfo.FileName);
//                }
//                else
//                {
//                    currentFile.Text = e.FileInfo.FileName;
//                    toolTip1.SetToolTip(statusStrip1, null);
//                }
//                fileProgress.Value = 0;
//            }
//        }

//        private void unrar_NewVolume(object sender, NewVolumeEventArgs e)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new NewVolumeDelegate(unrar_NewVolume), new[] { sender, e });
//            }
//            else
//            {
//                currentVolume.Text = new FileInfo(e.VolumeName).Name;
//            }
//        }

//        private void unrar_OutOfDiskSpace(object sender, OutOfDiskSpaceEventArgs e)
//        {
//            if (base.InvokeRequired)
//            {
//                base.Invoke(new OutOfDiskDelegate(unrar_OutOfDiskSpace), new[] { sender, e });
//            }
//            else if (
//                MessageBox.Show(this,
//                                "Disk is running low of storage space \n[" + PathUtils.FormatBytes(e.DestInfo.Free) +
//                                " free]", "Unpack problem", MessageBoxButtons.RetryCancel,
//                                MessageBoxIcon.Exclamation) == DialogResult.Cancel)
//            {
//                e.ContinueOperation = false;
//            }
//        }

//        private void unrar_PasswordRequired(object sender, PasswordRequiredEventArgs e)
//        {
//            var dialog = new TextInputDialog();
//            dialog.Prompt = string.Format("Password is required for extraction.", new object[0]);
//            dialog.PasswordChar = '*';
//            if (dialog.ShowDialog() == DialogResult.OK)
//            {
//                e.Password = dialog.Value;
//                e.ContinueOperation = true;
//            }
//            else
//            {
//                e.ContinueOperation = false;
//            }
//        }
//    }
//}
